package org.domain.sigepac.session;

import java.util.Date;
import java.util.Set;

import org.domain.sigepac.Utils;
import org.domain.sigepac.Entity.Aluno;
import org.domain.sigepac.Entity.Evasao;
import org.domain.sigepac.Entity.DestinoId;
import org.domain.sigepac.Entity.MotivoEvasao;
import org.domain.sigepac.Entity.Turma;
import org.domain.sigepac.repository.RepositorioAluno;
import org.domain.sigepac.repository.RepositorioEvasao;
import org.domain.sigepac.repository.RepositorioMotivoEvasao;
import org.domain.sigepac.repository.RepositorioTurma;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.international.StatusMessages;

@Name("evasaoHome")
@Scope(ScopeType.CONVERSATION)
public class EvasaoHome {


	@In
	private StatusMessages statusMessages;

	@In
	private RepositorioTurma repositorioTurma;

	@In
	private RepositorioEvasao repositorioEvasao;

	@In
	private RepositorioAluno repositorioAluno;

	@In
	private RepositorioMotivoEvasao repositorioMotivoEvasao;

	private Aluno aluno;

	private Evasao evasao;

	@DataModelSelection
	private Evasao evasaoSelecionada;

	private Date data=new Date();

	@DataModel
	private Set<Evasao> evasoes;

	@Factory("evasoes")
	public void listarEvasoesAluno(){
		if(evasoes==null){
			evasoes=aluno.getEvasoes();
		}
	}

	public EvasaoHome() {

	}

	public void adicionarEvasao() throws CloneNotSupportedException{
		evasao.setAluno(aluno);
		if( ((DestinoId) evasao.getId()).getIdAluno()==null){
			DestinoId id=new DestinoId();
			id.setIdAluno((Integer) aluno.getId());
			id.setIdMotivo((Integer) evasao.getMotivo().getId());
			id.setIdTurma((Integer) evasao.getTurma().getId());

			evasao.setId(id);
		}
		evasoes.add(evasao.Clone());
		evasao=null;
		getEvasao();
	}

	public void removerEvasao(){
		evasoes.remove(getEvasaoSelecionada());
	}

	public void editarEvasao(){
		setEvasao(getEvasaoSelecionada());
	}

	@End
	public void salvar(){

		for (Evasao evasao : evasoes) {

			repositorioEvasao.inserirOuAtualizar(evasao);
			Utils.entityManagerFlush();
		}
	}

	public Integer getIdAluno(){
		return (Integer) getAluno().getId();
	}

	public void setIdAluno(Integer idAluno) {
		setAluno(repositorioAluno.obterPorId(idAluno));
	}


	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
	public Aluno getAluno() {
		return aluno;
	}


	public Set<Evasao> getEvasaos() {
		return evasoes;
	}

	public void setEvasaoSelecionada(Evasao evasao) {
		this.evasaoSelecionada = evasao;
	}
	public Evasao getEvasaoSelecionada() {
		return evasaoSelecionada;
	}



	public Evasao getEvasao() {
		if(evasao==null){
			evasao=new Evasao();
			evasao.setAluno(getAluno());
			evasao.setTurma(new Turma());
			evasao.setMotivo(new MotivoEvasao());
			evasao.setData(new Date());
		}
		return evasao;
	}



	public void setEvasao(Evasao evasao) {
		this.evasao = evasao;
	}
}
